// 代码题
// 2
const fp = require('lodash/fp')
const _ = require('lodash')
const cars = [
    {
      name: 'Ferrari FF', horsepower: 660,
      dollar_value: 700000, in_stock: true
    },
    {
      name: 'Spyker C12 Zagato',
      horsepower: 650, dollar_value: 648000,
      in_stock: false
    },
    {
      name: 'Jaguar XKR-S', horsepower:
        550, dollar_value: 132000, in_stock:
        false
    },
    {
      name: 'Audi R8', horsepower: 525,
      dollar_value: 114200, in_stock: false
    },
    {
      name: 'Aston Martin One-77 ',
      horsepower: 750, dollar_value: 1850000,
      in_stock: true
    },
    {
      name: 'Pagani Huayra', horsepower:
        700, dollar_value: 1300000, in_stock:
        false
    }
]
// 练习 1: 使用函数组合 fp.flowRight ()重新实现下面这个函数
let isLastInStock = fp.flowRight(fp.prop('in_stock'), fp.last)
// console.log(isLastInStock(cars))

// 练习 2 :使用 fp.flowRight() 、 fp.prop() 和 fp.first() 获取第一个 car 的 name
let getFirstName = fp.flowRight(fp.prop('name'), fp.first)
// console.log(getFirstName(cars))

// 练习 3: 使用帮助函数 _average 重构averageDollarValue ,使用函数组合的方式实现
var _average = function(xs) { return _.reduce(_.add, 0, xs) / xs.length; }; // <- 无须改动
let averageDollarValue = function(cars) {
    return fp.flowRight(_average, fp.map(c => c.dollar_value))(cars)
}
// console.log(averageDollarValue(cars))

// 练习 4 :使用 flowRight  写一个 sanitizeNames ()函数，返回一个下划线连接的小写字符串，把数组中的 name 转换为这种形式：例如：sanitizeNames(["Hello World"]) => ["hello.world"]
let _underscore = fp.replace(/\W+/g, '_')  // < - - 无须改动，并在 sanitizeNames中使用它
let sanitizeNames = function(arr) {
    let x = fp.flowRight(_underscore, fp.toLower)
    return fp.map(x)(arr)
}
// sanitizeNames(['Hello World']) --> ['hello_world']
let arr = ['Hello World']
console.log(sanitizeNames(arr))